Programmable Logic Devices (PLDs) are Integrated Circuits (ICs) that are used to implement logic operations according to user-configurable input. Example PLDs include Complex Programmable Logic Devices (CPLDs) and Field Programmable Gate Arrays (FPGAs). CPLDs often include several function blocks that are based on a programmable logic array (PLA) architecture with sum-of-products logic. A configurable interconnect matrix transmits signals between the function blocks.
An example FPGA includes an array of configurable logic blocks (CLBs) and a ring or columns of programmable input/output blocks (IOBs). The CLBs and IOBs are interconnected by a programmable interconnect structure (routing resources). The CLBs, IOBs, and interconnect structure are typically programmed by loading a stream of configuration data (bitstream) into internal configuration memory cells that define how the CLBs, IOBs, and interconnect structure are configured. The configuration bitstream may be read from an external memory, such as an external integrated circuit memory EEPROM, EPROM, PROM, and the like, though other types of memory may be used. The collective states of the individual memory cells then determine the function of the FPGA.
PLDs can also be implemented in other ways, e.g., using fuse or antifuse technology. The terms “PLD” and “programmable logic device” include but are not limited to these exemplary devices, as well as encompassing devices that are only partially programmable. For example, one type of PLD includes a combination of hard-coded transistor logic and a programmable switch fabric that programmably interconnects the hard-coded transistor logic.
Some PLDs, such as various FPGAs from Xilinx, Inc., may be partially reconfigured. That is, the PLD may be initially configured with a first configuration bitstream. At some later time, a part of the PLD may be reconfigured without disturbing the configuration of the rest of the PLD. This capability allows a system design to be part static and part dynamic. The static part of the design contains a conceptual socket on the PLD into which the dynamic part of the design may be inserted. The dynamic part of the design may include, for example, different modules that are tailored to different processing needs of the static part of the design. The PLD may be configured with one module when one type of data is being processed and then may be partially reconfigured with another module when another type of data is to be processed.
Today's large-scale designs may be composed of multiple parts for which different parties may be responsible. For example, libraries of logic cores may be developed and distributed by one company for use by other companies in integrating a large scale system. Relative to partial reconfiguration scenarios, one company may develop the static part of the design and use the logic cores from another company for the dynamic part of the design.